home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / c / icu-1.3.1 / icu-bin / include / ucnv_bld.h < prev    next >
C/C++ Source or Header  |  2000-02-23  |  7KB  |  221 lines

  1. /*
  2. *******************************************************************************
  3. *                                                                             *
  4. * COPYRIGHT:                                                                  *
  5. *   (C) Copyright International Business Machines Corporation, 1998           *
  6. *   Licensed Material - Program-Property of IBM - All Rights Reserved.        *
  7. *   US Government Users Restricted Rights - Use, duplication, or disclosure   *
  8. *   restricted by GSA ADP Schedule Contract with IBM Corp.                    *
  9. *                                                                             *
  10. *******************************************************************************
  11. *
  12. *
  13. *
  14. *  ucnv_bld.h:
  15. *  Contains all internal and external data structure definitions
  16. * Created & Maitained by Bertrand A. Damiba
  17. *
  18. *
  19. *
  20. * ATTENTION:
  21. * ---------
  22. * Although the data structures in this file are open and stack allocatable
  23. * we reserve the right to hide them in further releases.
  24. */
  25.  
  26. #ifndef UCNV_BLD_H
  27. #define UCNV_BLD_H
  28.  
  29. #include "utypes.h"
  30.  
  31. #define UCNV_MAX_SUBCHAR_LEN 4
  32. #define UCNV_ERROR_BUFFER_LENGTH 20
  33.  
  34. #ifndef UCMP16_H
  35. typedef struct _CompactShortArray CompactShortArray;
  36. #endif
  37.  
  38. #ifndef UCMP8_H
  39. typedef struct _CompactByteArray CompactByteArray;
  40. #endif
  41.  
  42. #define UCNV_IMPLEMENTED_CONVERSION_TYPES 9
  43. /*Sentinel Value used to check the integrity of the binary data files */
  44.  
  45. #define UCNV_FILE_CHECK_MARKER 0xBEDA
  46.  
  47. #define UCNV_COPYRIGHT_STRING \
  48.     " * COPYRIGHT:                                                                   *\n" \
  49.     " *   (C) Copyright International Business Machines Corporation, 1999            *\n"
  50.  
  51. #define UCNV_COPYRIGHT_STRING_LENGTH  200
  52. /*maximum length of the converter names */
  53. #define UCNV_MAX_CONVERTER_NAME_LENGTH 60
  54. #define UCNV_MAX_FULL_FILE_NAME_LENGTH (600+UCNV_MAX_CONVERTER_NAME_LENGTH)
  55.  
  56. /*Pointer to the aforementioned file */
  57. #define UCNV_MAX_LINE_TEXT (UCNV_MAX_CONVERTER_NAME_LENGTH*400)
  58.  
  59. #define  UCNV_SI 0x0F        /*Shift in for EBDCDIC_STATEFUL and iso2022 states */
  60. #define  UCNV_SO 0x0E        /*Shift out for EBDCDIC_STATEFUL and iso2022 states */
  61.  
  62. typedef enum {
  63.     UCNV_UNSUPPORTED_CONVERTER = -1,
  64.     UCNV_SBCS = 0,
  65.     UCNV_DBCS = 1,
  66.     UCNV_MBCS = 2,
  67.     UCNV_LATIN_1 = 3,
  68.     UCNV_UTF8 = 4,
  69.     UCNV_UTF16_BigEndian = 5,
  70.     UCNV_UTF16_LittleEndian = 6,
  71.     UCNV_EBCDIC_STATEFUL = 7,
  72.     UCNV_ISO_2022 = 8,
  73.     /** Number of converter types for which we have conversion routines. */
  74.     UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES = 9,
  75.     UCNV_JIS = 9,
  76.     UCNV_EUC = 10,
  77.     UCNV_GB = 11
  78. } UConverterType;
  79.  
  80. typedef enum {
  81.     UCNV_UNKNOWN = -1,
  82.     UCNV_IBM = 0
  83. } UConverterPlatform;
  84.  
  85.  
  86. /*Table Node Definitions */
  87. typedef struct
  88.   {
  89.     UChar toUnicode[256];
  90.     CompactByteArray *fromUnicode;
  91.   }
  92. UConverterSBCSTable;
  93.  
  94. typedef struct
  95.   {
  96.     CompactShortArray *toUnicode;
  97.     CompactShortArray *fromUnicode;
  98.   }
  99. UConverterDBCSTable;
  100.  
  101. typedef struct
  102.   {
  103.     bool_t starters[256];
  104.     CompactShortArray *toUnicode;
  105.     CompactShortArray *fromUnicode;
  106.   }
  107. UConverterMBCSTable;
  108.  
  109. typedef union
  110.   {
  111.     UConverterSBCSTable sbcs;
  112.     UConverterDBCSTable dbcs;
  113.     UConverterMBCSTable mbcs;
  114.   }
  115. UConverterTable;
  116.  
  117.  
  118. /*Defines the struct of a UConverterSharedData the immutable, shared part of
  119.  *UConverter
  120.  */
  121. typedef struct
  122.   {
  123.     uint32_t referenceCounter;    /*used to count number of clients */
  124.     char name[UCNV_MAX_CONVERTER_NAME_LENGTH];    /*internal name of the converter */
  125.     UConverterPlatform platform;    /*platform of the converter (only IBM now) */
  126.     int32_t codepage;        /*codepage # (now IBM-$codepage) */
  127.     UConverterType conversionType;    /*conversion type */
  128.     int8_t minBytesPerChar;    /*Minimum # bytes per char in this codepage */
  129.     int8_t maxBytesPerChar;    /*Maximum # bytes per char in this codepage */
  130.     struct
  131.       {                /*initial values of some members of the mutable part of object */
  132.     uint32_t toUnicodeStatus;
  133.     int8_t subCharLen;
  134.     unsigned char subChar[UCNV_MAX_SUBCHAR_LEN];
  135.       }
  136.     defaultConverterValues;
  137.     UConverterTable *table;    /*Pointer to conversion data */
  138.   }
  139. UConverterSharedData;
  140.  
  141.  
  142. /*Defines a UConverter, the lightweight mutable part the user sees */
  143.  
  144. U_CDECL_BEGIN /* We must declare the following as 'extern "C"' so that if ucnv
  145.                  itself is compiled under C++, the linkage of the funcptrs will
  146.                  work.
  147.           */
  148.  
  149. struct UConverter
  150.   {
  151.     int32_t toUnicodeStatus;    /*Used to internalize stream status information */
  152.     int32_t fromUnicodeStatus;
  153.     int8_t invalidCharLength;
  154.     int8_t invalidUCharLength;
  155.     int8_t pad;
  156.     int32_t mode;
  157.     int8_t subCharLen;        /*length of the codepage specific character sequence */
  158.     unsigned char subChar[UCNV_MAX_SUBCHAR_LEN];    /*codepage specific character sequence */
  159.     UChar UCharErrorBuffer[UCNV_ERROR_BUFFER_LENGTH];    /*used to store unicode data meant for 
  160.                                *output stream  by the Error function pointers 
  161.                              */
  162.     unsigned char charErrorBuffer[UCNV_ERROR_BUFFER_LENGTH];    /*used to store codepage data meant for
  163.                                * output stream by the Error function pointers 
  164.                              */
  165.     int8_t UCharErrorBufferLength;    /*used to indicate the number of valid UChars
  166.                        *in charErrorBuffer
  167.                      */
  168.     int8_t charErrorBufferLength;    /*used to indicate the number of valid bytes
  169.                        *in charErrorBuffer
  170.                      */
  171.  
  172.     UChar invalidUCharBuffer[3];
  173.     char invalidCharBuffer[UCNV_MAX_SUBCHAR_LEN];
  174.     /*Error function pointer called when conversion issues
  175.      *occur during a T_UConverter_fromUnicode call
  176.      */
  177.     void (*fromUCharErrorBehaviour) (struct UConverter *,
  178.                      char **,
  179.                      const char *,
  180.                      const UChar **,
  181.                      const UChar *,
  182.                      int32_t* offsets,
  183.                      bool_t,
  184.                      UErrorCode *);
  185.     /*Error function pointer called when conversion issues
  186.      *occur during a T_UConverter_toUnicode call
  187.      */
  188.     void (*fromCharErrorBehaviour) (struct UConverter *,
  189.                     UChar **,
  190.                     const UChar *,
  191.                     const char **,
  192.                     const char *,
  193.                     int32_t* offsets,
  194.                     bool_t,
  195.                     UErrorCode *);
  196.  
  197.     UConverterSharedData *sharedData;    /*Pointer to the shared immutable part of the
  198.                      *converter object
  199.                      */
  200.     void *extraInfo;        /*currently only used to point to a struct containing UConverter used by iso 2022
  201.                    Could be used by clients writing their own call back function to
  202.                    pass context to them
  203.                  */
  204.   };
  205.  
  206. U_CDECL_END /* end of UConverter */
  207.  
  208. typedef struct UConverter UConverter;
  209.  
  210.  
  211. typedef struct
  212.   {
  213.     UConverter *currentConverter;
  214.     unsigned char escSeq2022[10];
  215.     int8_t escSeq2022Length;
  216.   }
  217. UConverterDataISO2022;
  218.  
  219.  
  220. #endif /* _UCNV_BLD */
  221.